約 2,913,052 件
https://w.atwiki.jp/sampleisbest/pages/281.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 morse アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト 使用例 C \ morse -a0.2 -l5000 "トラ" morse.cpp // マルチバイト文字セット #pragma comment(lib, "winmm") #define _USE_MATH_DEFINES #include stdio.h #include math.h #include Windows.h #include vector using namespace std; #define SAFE_FREE(p)if (p) { free(p); p = NULL; } #define SAMPLING_RATE11025 #define FREQ882.0 // 関数プロトタイプ宣言 void AddDots(bool b, int count); // 欧文文字 LPCTSTR letters[] = { "01",// A "1000",// B "1010",// C "100",// D "0",// E "0010",// F "110",// G "0000",// H "00",// I "0111",// J "101",// K "0100",// L "11",// M "10",// N "111",// O "0110",// P "1101",// Q "010",// R "000",// S "1",// T "001",// U "0001",// V "011",// W "1001",// X "1011",// Y "1100",// Z }; // 数字 LPCTSTR numbers[] = { "11111",// 0 "01111",// 1 "00111",// 2 "00011",// 3 "00001",// 4 "00000",// 5 "10000",// 6 "11000",// 7 "11100",// 8 "11110",// 9 }; // 記号 LPCTSTR punctuation[] = { "010101",// . Period "110011",// , Comma "001100",// ? Question mark "011110",// Apostrophe "101011",// ! Exclamation mark "10010",// / Slash, Fraction bar "10110",// ( Parenthesis open "101101",// ) Parenthesis close "01000",// Ampersand, Wait "111000",// Colon "101010",// ; Semicolon "10001",// = Double dash "01010",// + Plus "100001",// - Hyphen, Minus "001101",// _ Underscore "010010",// " Quotation mark "0001001",// $ Dollar sign "011010",// @ At sign }; // 和文文字 LPCTSTR kana[] = { NULL,// 。 NULL,// 「 "010100",// 」(段落) "010101",// 、(区切点) NULL,// ・ "0111",// ヲ NULL,// ァ NULL,// ィ NULL,// ゥ NULL,// ェ NULL,// ォ NULL,// ャ NULL,// ュ NULL,// ョ NULL,// ッ "01101",// ー(長音) "11011",// ア "01",// イ "001",// ウ "10111",// エ "01000",// オ "0100",// カ "10100",// キ "0001",// ク "1011",// ケ "1111",// コ "10101",// サ "11010",// シ "11101",// ス "01110",// セ "1110",// ソ "10",// タ "0010",// チ "0110",// ツ "01011",// テ "00100",// ト "010",// ナ "1010",// ニ "0000",// ヌ "1101",// ネ "0011",// ノ "1000",// ハ "11001",// ヒ "1100",// フ "0",// ヘ "100",// ホ "1001",// マ "00101",// ミ "1",// ム "10001",// メ "10010",// モ "011",// ヤ "10011",// ユ "11",// ヨ "000",// ラ "110",// リ "10110",// ル "111",// レ "0101",// ロ "101",// ワ //"01001",// ヰ //"01100",// ヱ "01010",// ン "00",// ゛(濁点) "00110",// ゜(半濁点) }; // 外部変数 DWORD sampleLength = 0; PBYTE waveformData = NULL; vector bool dots; //============================================================================== int main(int argc, char *argv[]) { // プログラム引数 LPCTSTR words = NULL; double amp = 0.1; int loops = 0; int wpm = 20; for (int i = 1; i argc; i++) { LPCTSTR p = argv[i]; if (p[0] == - ) { switch (p[1]) { case a amp = atof(p + 2); break; case l loops = atoi(p + 2); break; case w wpm = atoi(p + 2); break; } } else { words = p; } } if (words == NULL) { fprintf(stderr, "usage morse -a(f) -l(n) -w(n) \"words\"\n"); return 1; } // 符号化 for (int i = 0; words[i]; i++) { LPCTSTR code = NULL; BYTE c = words[i]; if (c == ) { AddDots(false, 4); } else if ( A = c c = Z ) { code = letters[c - A ]; } else if ( a = c c = z ) { code = letters[c - a ]; } else if (0xa1 = c c = 0xdf) { code = kana[c - 0xa1]; } if (code) { for ( ; *code; code++) { AddDots(true, (*code 1) ? 3 1); AddDots(false, 1); } AddDots(false, 2); } } // 波形データの作成 int dotLen = SAMPLING_RATE * 60 / (50 * wpm); sampleLength = dots.size() * dotLen; waveformData = (PBYTE)malloc(sampleLength); int i = 0; for (vector bool iterator it = dots.begin(); it != dots.end(); it++) { if (*it) { for (int n = 0; n dotLen; n++) { double t = fmod(FREQ * i / SAMPLING_RATE, 1); double y = amp * sin(2 * M_PI * t); waveformData[i++] = BYTE(128 + 127 * y); } } else { for (int n = 0; n dotLen; n++) { waveformData[i++] = 128; } } } // Play WAVEFORMATEX wfx; wfx.wFormatTag= WAVE_FORMAT_PCM; wfx.wBitsPerSample= 8; wfx.nChannels= 1; wfx.nSamplesPerSec= SAMPLING_RATE; wfx.nBlockAlign= (wfx.wBitsPerSample / 8) * wfx.nChannels; wfx.nAvgBytesPerSec= wfx.nSamplesPerSec * wfx.nBlockAlign; wfx.cbSize= 0; HWAVEOUT hwo; MMRESULT mmr = waveOutOpen( hwo, WAVE_MAPPER, wfx, NULL, 0, CALLBACK_NULL); WAVEHDR wh; ZeroMemory( wh, sizeof wh); wh.lpData= (LPSTR)waveformData; wh.dwBufferLength= sampleLength; wh.dwFlags= WHDR_BEGINLOOP | WHDR_ENDLOOP; wh.dwLoops= loops ? MAXDWORD 1; mmr = waveOutPrepareHeader(hwo, wh, sizeof wh); mmr = waveOutWrite(hwo, wh, sizeof wh); // Wait Sleep(loops ? loops 1000 * sampleLength / SAMPLING_RATE); // Stop mmr = waveOutReset(hwo); mmr = waveOutUnprepareHeader(hwo, wh, sizeof wh); mmr = waveOutClose(hwo); SAFE_FREE(waveformData); return 0; } void AddDots(bool b, int count) { for (int n = 0; n count; n++) { dots.push_back(b); } }
https://w.atwiki.jp/sampleisbest/pages/88.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 fdump アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト fdump.c #include stdio.h void fdump(float value) { unsigned v = *(unsigned *) value; char bit[32+3]; char *b = bit; char sign;// 符号部(1bit) int exponent;// 指数部(8bit) double fraction;// 仮数部(23bit) int i; for (i = 0; i 32; i++) { *b++ = (v (1 (31-i))) ? 1 0 ; if (i == 0 || i == 8) *b++ = . ; } *b = \0 ; sign = (v 0x80000000) ? - + ; exponent = ((v 23) 0xff) - 127; fraction = (v 0x7fffff) / (double)0x800000; printf("%s s %c e 2^%d f 1+%.7f\n", bit, sign, exponent, fraction); } int main() { fdump(1.5f); fdump(0.5f); fdump(-2.0f); fdump(0.0f); return 0; } 出力 0.01111111.10000000000000000000000 s + e 2^0 f 1+0.5000000 0.01111110.00000000000000000000000 s + e 2^-1 f 1+0.0000000 1.10000000.00000000000000000000000 s - e 2^1 f 1+0.0000000 0.00000000.00000000000000000000000 s + e 2^-127 f 1+0.0000000 fdump1.c #include stdio.h void fdump(float value) { unsigned char *v = (unsigned char *) value; char bit[35]; char *b = bit; char sign;// 符号部(1bit) int exponent;// 指数部(8bit) double fraction = 0.0;// 仮数部(23bit) double d = 0.5; int i; for (i = 0; i 32; i++) { *b++ = (v[3-i/8] (1 (7-i%8))) ? 1 0 ; if (i == 0 || i == 8) *b++ = . ; } *b = \0 ; sign = (v[3] 0x80) ? - + ; exponent = (((v[3] 0x7f) 1) | (v[2] 7)) - 127; for (i = 9; i 32; i++) { if (v[3-i/8] (1 (7-i%8))) fraction += d; d *= 0.5; } printf("b %s s %c e 2^%d f 1+%.7f\n", bit, sign, exponent, fraction); } int main() { fdump(1.5f); fdump(0.5f); fdump(-2.0f); fdump(0.0f); return 0; } 出力 b 0.01111111.10000000000000000000000 s + e 2^0 f 1+0.5000000 b 0.01111110.00000000000000000000000 s + e 2^-1 f 1+0.0000000 b 1.10000000.00000000000000000000000 s - e 2^1 f 1+0.0000000 b 0.00000000.00000000000000000000000 s + e 2^-127 f 1+0.0000000
https://w.atwiki.jp/xboxonescore/pages/750.html
Big Crown:Showdown 項目数:19 総ポイント:1000 難易度:☆☆☆☆☆ Winner Winner Chicken Dinner Win your first game 50 Ka-Ching Collect your first coin 20 Greedy Guts Collect all of the coins from a treasure chest 50 Stylish Purchase your first hat 20 Fashionista Purchase all of the hats 200 The Powers of the Internet Complete an Online Multiplayer match 20 Sofa Knights Complete a Local Multiplayer match 20 Internet Friends Play with 4 people online 40 Friends with Benefits Play with 4 people locally 40 Game Designer Make a custom game 20 Games Design Intern Join a custom game 20 I.G. Knight Get your first knock-out 20 Turtle Knight Get your first shield deflection knock-out 50 Pacifist Complete a round without punching 50 Repo-man Knock 1000 objects off the track 100 So Near Yet So Far Be the last one alive but don t cross the finishing line 40 MARATHRONE! Run a Marathon(26.2 miles) 200 Square Eyes Knock the Knight s TV into the portal 20 Welcome to the Showdown Complete your first game 20
https://w.atwiki.jp/sampleisbest/pages/126.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 dxdriver アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト 参考 現在利用しているビデオカード名とドライバファイル名を取得する dxdriver.cpp /* プロジェクトのプロパティにDirectX SDKのディレクトリを追加する。 構成プロパティ/VC++ ディレクトリ インクルード ディレクトリ:C \Program Files\Microsoft DirectX SDK (February 2010)\Include ライブラリ ディレクトリ:C \Program Files\Microsoft DirectX SDK (February 2010)\Lib\x86 */ #pragma comment(lib, "ddraw.lib") #pragma comment(lib, "dxguid.lib") #include stdio.h #include ddraw.h int main() { HRESULT hr; IDirectDraw7 *pDD = NULL; hr = DirectDrawCreateEx(NULL, (LPVOID *) pDD, IID_IDirectDraw7, NULL); if (hr != DD_OK) { return 1; } DDDEVICEIDENTIFIER2 dddi = {0}; hr = pDD- GetDeviceIdentifier( dddi, 0); if (hr != DD_OK) { return 1; } printf("DriverName %s\n", dddi.szDriver); printf("DriverDescription %s\n", dddi.szDescription); WORD wProduct= HIWORD(dddi.liDriverVersion.HighPart); WORD wVersion= LOWORD(dddi.liDriverVersion.HighPart); WORD wSubVersion= HIWORD(dddi.liDriverVersion.LowPart); WORD wBuild= LOWORD(dddi.liDriverVersion.LowPart); printf("ProductVer. %u\n", wProduct); printf("Version %u\n", wVersion); printf("SubVer. %u\n", wSubVersion); printf("Build# %u\n", wBuild); printf("VendorId %u\n", dddi.dwVendorId); printf("DeviceId %u\n", dddi.dwDeviceId); printf("SubSysId %u\n", dddi.dwSubSysId); printf("Revision %u\n", dddi.dwRevision); printf("WHQLLevel %u\n", dddi.dwWHQLLevel); pDD- Release(); return 0; } 出力 DriverName nv4_disp.dll DriverDescription NVIDIA GeForce 9800 GT ProductVer. 0 Version 0 SubVer. 0 Build# 0 VendorId 4318 DeviceId 1556 SubSysId 0 Revision 162 WHQLLevel 1
https://w.atwiki.jp/sampleisbest/pages/85.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 wave アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト wave.c #pragma comment(lib, "winmm.lib") #define _USE_MATH_DEFINES #include math.h #include stdio.h #include Windows.h #define VOLUME64 #define FREQ440 #define SAMPLE_RATE11025 #define TONE_MSEC1000 #define DATA_LEN(SAMPLE_RATE * TONE_MSEC / 1000) int main() { WAVEFORMATEXwfx; MMRESULTmmr; HWAVEOUThwo; WAVEHDRwh; characData[DATA_LEN]; doubledWave; inti; // 波形データの作成 for (i = 0; i DATA_LEN; i++) { dWave = sin(i * FREQ * 2 * M_PI / SAMPLE_RATE); acData[i] = (char)(dWave * VOLUME) + 128; //acData[i] = rand() * 2 * VOLUME / RAND_MAX + 128 - VOLUME;// ホワイトノイズ } // Play wfx.wFormatTag= WAVE_FORMAT_PCM; wfx.nChannels= 1; wfx.nSamplesPerSec= SAMPLE_RATE; wfx.nAvgBytesPerSec= SAMPLE_RATE; wfx.nBlockAlign= 1; wfx.wBitsPerSample= 8; wfx.cbSize= 0; mmr = waveOutOpen( hwo, WAVE_MAPPER, wfx, 0, 0, CALLBACK_NULL); if (mmr != MMSYSERR_NOERROR) { fprintf(stderr, "error waveOutOpen\n"); return 1; } ZeroMemory( wh, sizeof wh); wh.lpData= acData; wh.dwBufferLength= DATA_LEN; mmr = waveOutPrepareHeader(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { fprintf(stderr, "error waveOutPrepareHeader\n"); return 1; } mmr = waveOutWrite(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { fprintf(stderr, "error waveOutWrite\n"); return 1; } // Wait Sleep(TONE_MSEC); // Stop mmr = waveOutReset(hwo); if (mmr != MMSYSERR_NOERROR) { fprintf(stderr, "error waveOutReset\n"); return 1; } mmr = waveOutUnprepareHeader(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { fprintf(stderr, "error waveOutUnprepareHeader\n"); return 1; } mmr = waveOutClose(hwo); if (mmr != MMSYSERR_NOERROR) { fprintf(stderr, "error waveOutClose\n"); return 1; } return 0; }
https://w.atwiki.jp/sampleisbest/pages/127.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 wtlhello アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 以下のATL/WTLを使用。 Windows Driver Kit Version 7.1.0 WTL 8.1.12085 リンカーのwarningの意味は「異なる属性の複数のセクションがマージされている」という事らしい。 リンカーオプションの/verboseや/mapを指定して調べてみたがよく分からない。 とりあえずwarningを抑止する事にした。 参考 Windows Template Library - Wikipedia Visual C++ 2010 Express の導入 【Part.6】 wtlhello.cpp /* ATL/WTLディレクトリの追加 構成プロパティ/VC++ ディレクトリ ・インクルード ディレクトリ:C \etc\wtl81_12085\Include;C \WinDDK\7600.16385.1\inc\atl71 ・ライブラリ ディレクトリ:C \WinDDK\7600.16385.1\lib\ATL\i386 構成プロパティ/リンカー/コマンド ライン ・追加オプション:/ignore 4078,4254 */ #pragma comment(lib, "atlthunk.lib") #include Windows.h // ATLヘッダ #define _ATL_NO_AUTOMATIC_NAMESPACE #include atlbase.h #include atlwin.h // WTLヘッダ #define _WTL_NO_AUTOMATIC_NAMESPACE #include atlapp.h #include atlcrack.h class HelloWindow public ATL CWindowImpl HelloWindow { public // ウィンドウクラス名を登録 DECLARE_WND_CLASS(TEXT("HelloWindow")); private // メッセージマップ BEGIN_MSG_MAP(HelloWindow) MSG_WM_PAINT(OnPaint) MSG_WM_DESTROY(OnDestroy) END_MSG_MAP() // 描画メッセージ void OnPaint(HDC) { WTL CPaintDC dc(m_hWnd); dc.TextOut(10, 10, TEXT("Hello, world"), -1); } // ウィンドウが破棄されるメッセージ void OnDestroy() { PostQuitMessage(0); } }; int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int nCmdShow) { // ウィンドウのインスタンスを生成 HelloWindow wnd; HWND hWnd = wnd.Create(NULL, ATL CWindow rcDefault, TEXT("Hello, world"), WS_OVERLAPPEDWINDOW); if (!hWnd) { return -1; } // ウィンドウ表示 wnd.ShowWindow(nCmdShow); wnd.UpdateWindow(); // メッセージループ WTL CMessageLoop msgLoop; return msgLoop.Run(); }
https://w.atwiki.jp/sampleisbest/pages/54.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 DlgBase2 アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode DlgBase2.cpp #include stdio.h #include tchar.h #include Windows.h #include "resource.h" // 関数プロトタイプ宣言 int GetIniFileName(void); INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnInitDialog(HWND hDlg); void OnDestroy(HWND hDlg); void WriteIniFileInt(TCHAR* ptcSec, TCHAR* ptcKey, int iValue); // グローバル変数 TCHAR g_atcIniFile[_MAX_PATH] = _T(""); //============================================================================== int APIENTRY _tWinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance, LPTSTRlpCmdLine, intnCmdShow) { if (GetIniFileName()) { return 0; } DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, DialogProc); return 0; } //------------------------------------------------------------------------------ int GetIniFileName(void) { TCHARatcPath[_MAX_PATH]; TCHARatcDrive[_MAX_DRIVE]; TCHARatcDir[_MAX_DIR]; TCHARatcFName[_MAX_FNAME]; TCHARatcExt[_MAX_EXT]; if (GetModuleFileName(NULL, atcPath, _countof(atcPath)) == 0) { return -1; } if (_tsplitpath_s(atcPath, atcDrive, atcDir, atcFName, atcExt) != 0) { return -1; } if (_tmakepath_s(g_atcIniFile, atcDrive, atcDir, atcFName, _T("ini")) != 0) { return -1; } return 0; } //------------------------------------------------------------------------------ INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTRiRetVal = TRUE;// メッセージを処理した TCHARatcStr[256]; intiRet; switch (uMsg) { case WM_COMMAND switch (LOWORD(wParam)) { case IDC_BUTTON_WORLD MessageBox(hDlg, _T("hello, world"), _T("World"), MB_OK); break; case IDOK GetDlgItemText(hDlg, IDC_EDIT_HELLO, atcStr, _countof(atcStr)); MessageBox(hDlg, atcStr, _T("OK"), MB_OK); break; case IDCANCEL iRet = MessageBox(hDlg, _T("終了しますか?"), _T("Cancel"), MB_YESNO); if (iRet == IDYES) { EndDialog(hDlg, IDCANCEL); } break; } break; case WM_INITDIALOG OnInitDialog(hDlg); iRetVal = TRUE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE EndDialog(hDlg, 0); break; case WM_DESTROY OnDestroy(hDlg); break; default iRetVal = FALSE;// メッセージを処理しなかった } return iRetVal; } //------------------------------------------------------------------------------ void OnInitDialog(HWND hDlg) { intiX; intiY; iX = GetPrivateProfileInt(_T("General"), _T("iX"), 0, g_atcIniFile); iY = GetPrivateProfileInt(_T("General"), _T("iY"), 0, g_atcIniFile); SetWindowPos(hDlg, HWND_TOP, iX, iY, 0, 0, SWP_NOSIZE); } //------------------------------------------------------------------------------ void OnDestroy(HWND hDlg) { RECTrc; GetWindowRect(hDlg, rc); WriteIniFileInt(_T("General"), _T("iX"), rc.left); WriteIniFileInt(_T("General"), _T("iY"), rc.top); } //------------------------------------------------------------------------------ void WriteIniFileInt(TCHAR* ptcSec, TCHAR* ptcKey, int iValue) { TCHARatcBuf[16]; _stprintf_s(atcBuf, _T("%d"), iValue); WritePrivateProfileString(ptcSec, ptcKey, atcBuf, g_atcIniFile); } resource.h #define IDD_MAIN_DIALOG100 #define IDC_STATIC-1 #define IDC_EDIT_HELLO1000 #define IDC_BUTTON_WORLD1001 DlgBase2.rc // リソーススクリプト #include windows.h #include "resource.h" IDD_MAIN_DIALOG DIALOGEX 0, 0, 320, 100 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "DlgBase2" FONT 9, "MS Pゴシック" BEGIN LTEXT"Hello( H) ",IDC_STATIC,8,8,48,12 EDITTEXTIDC_EDIT_HELLO,56,8,48,12,ES_AUTOHSCROLL PUSHBUTTON"World( W)",IDC_BUTTON_WORLD,104,8,48,12 DEFPUSHBUTTON"OK",IDOK,212,76,48,16 PUSHBUTTON"Cancel",IDCANCEL,264,76,48,16 END
https://w.atwiki.jp/sampleisbest/pages/519.html
開発環境 Microsoft Visual Studio Community 2017 実行環境 Microsoft Windows 10 Home (64-bit) プロジェクトの種類 Visual C++ / 空のプロジェクト プロジェクト名 waveloop2 参考 WAVEのマルチバッファリング ループ再生と一時停止 waveloop2.cpp // プロジェクトのプロパティ // Unicode文字セット #pragma comment(lib, "winmm") #include Windows.h #include wchar.h #include "Resource.h" #define SAMPLE_RATE 44100 #define BUFFERS 2 #define BUF_LEN 2048 // 関数プロトタイプ宣言 void Trace(LPCWSTR format, ...); INT_PTR CALLBACK MainDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); void Play(HWND hDlg); void Stop(HWND hDlg); void GenerateWaveForm(LPWAVEHDR pwh); // グローバル変数 HWAVEOUT hwo = NULL; WAVEHDR wh[BUFFERS]; BYTE waveform[BUFFERS][BUF_LEN]; bool playing = false; int phase; int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINDLG), NULL, MainDlg); return 0; } void Trace(LPCWSTR format, ...) { va_list arg_ptr; WCHAR buffer[256]; va_start(arg_ptr, format); int size = _vsnwprintf_s(buffer, _TRUNCATE, format, arg_ptr); va_end(arg_ptr); OutputDebugString(buffer); } INT_PTR CALLBACK MainDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { INT_PTR ret = TRUE;// メッセージを処理した switch (message) { case MM_WOM_DONE if (playing) GenerateWaveForm((LPWAVEHDR)lParam); break; //case MM_WOM_OPEN //case MM_WOM_CLOSE case WM_COMMAND switch (LOWORD(wParam)) { case IDC_PLAY Play(hDlg); break; case IDC_STOP Stop(hDlg); break; case IDCANCEL EndDialog(hDlg, IDCANCEL); break; } break; case WM_INITDIALOG ret = TRUE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE Stop(hDlg); ret = FALSE; break; default ret = FALSE;// メッセージを処理しなかった } return ret; } void Play(HWND hDlg) { MMRESULT mmr; Trace(L"Play()\n"); EnableWindow(GetDlgItem(hDlg, IDC_PLAY), FALSE); playing = true; WAVEFORMATEX wfx; wfx.wFormatTag = WAVE_FORMAT_PCM; wfx.nChannels = 1; wfx.nSamplesPerSec = SAMPLE_RATE; wfx.nAvgBytesPerSec = SAMPLE_RATE; wfx.nBlockAlign = 1; wfx.wBitsPerSample = 8; wfx.cbSize = 0; mmr = waveOutOpen( hwo, WAVE_MAPPER, wfx, (DWORD_PTR)hDlg, NULL, CALLBACK_WINDOW); Trace(L"waveOutOpen %u\n", mmr); phase = 0; for (int i = 0; i BUFFERS; i++) { LPWAVEHDR pwh = wh + i; pwh- lpData = (LPSTR)(waveform[i]); pwh- dwBufferLength = BUF_LEN; pwh- dwFlags = 0; mmr = waveOutPrepareHeader(hwo, pwh, sizeof WAVEHDR); Trace(L"waveOutPrepareHeader %d %u\n", i, mmr); GenerateWaveForm(pwh); } } void Stop(HWND hDlg) { Trace(L"Stop()\n"); EnableWindow(GetDlgItem(hDlg, IDC_PLAY), TRUE); playing = false; if (hwo) { MMRESULT mmr; mmr = waveOutReset(hwo); Trace(L"waveOutReset %u\n", mmr); for (int i = 0; i BUFFERS; i++) { mmr = waveOutUnprepareHeader(hwo, wh + i, sizeof WAVEHDR); Trace(L"waveOutUnprepareHeader %d %u\n", i, mmr); } mmr = waveOutClose(hwo); Trace(L"waveOutClose %u\n", mmr); hwo = NULL; } } void GenerateWaveForm(LPWAVEHDR pwh) { LPBYTE data = (LPBYTE)(pwh- lpData); for (int i = 0; i BUF_LEN; i++) { phase += 440; if (SAMPLE_RATE = phase) phase -= SAMPLE_RATE; double t = phase / (double)SAMPLE_RATE; data[i] = 128 + (t 0.5 ? 1 -1) * 10; } waveOutWrite(hwo, pwh, sizeof WAVEHDR); } Resource.h #define IDD_MAINDLG100 #define IDC_STATIC-1 #define IDC_PLAY1000 #define IDC_STOP1001 waveloop2.rc // resource script #include windows.h #include "resource.h" IDD_MAINDLG DIALOGEX 100, 100, 320, 200 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW CAPTION "waveloop2" FONT 9, "MS UI Gothic" BEGIN PUSHBUTTON"Play( P)", IDC_PLAY, 10, 10, 50, 15 PUSHBUTTON"Stop( S)", IDC_STOP, 70, 10, 50, 15 END
https://w.atwiki.jp/sampleisbest/pages/31.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 sock アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト WSAはWindows Sockets APIを表す sock.c // インポート ライブラリ #pragma comment(lib, "ws2_32.lib") #include stdio.h #include WinSock2.h int main() { WSADATAwsaData; intiRet; iRet = WSAStartup(MAKEWORD(2, 2), wsaData); if (iRet != 0) { fprintf(stderr, "error WSAStartup %d\n", iRet); return 1; } printf("wVersion=[%#.2x,%#.2x]\n", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion)); printf("wHighVersion=[%#.2x,%#.2x]\n", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion)); printf("szDescription=[%s]\n", wsaData.szDescription); printf("szSystemStatus=[%s]\n", wsaData.szSystemStatus); WSACleanup(); return 0; } 出力 wVersion=[0x02,0x02] wHighVersion=[0x02,0x02] szDescription=[WinSock 2.0] szSystemStatus=[Running]
https://w.atwiki.jp/sampleisbest/pages/264.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 PlayMML アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト 文字セット マルチバイト PlayMML.cpp // マルチバイト文字セット #pragma comment(lib, "winmm") #include Windows.h // status #define NOTE_OFF0x8 #define NOTE_ON0x9 #define PROGRAM_CHANGE0xc // program #define ACOUSTIC_PIANO0x00 #define MAKESMSG(st,ch,d1,d2) ((st) 4|(ch)|(d1) 8|(d2) 16) #define CH 0 // 関数プロトタイプ宣言 void Command(TCHAR newCmd); const int noteList[] = {9, 11, 0, 2, 4, 5, 7}; // 外部変数 HMIDIOUT hmo; TCHAR cmd = ; int note; int tempo = 120; int len = 4; int octave = 4; int velocity = 0x70; int value = 0; int dot = 0; //============================================================================== int main() { //LPCTSTR mml = "ccggaag2ffeeddc2"; //LPCTSTR mml = "t180 cdefedcr efgagfer crcrcrcr l8ccddeefferdrl4cr"; LPCTSTR mml = "o5co4b8.a16g.f8edc.g8a.a8b.b8o5c2."; midiOutOpen( hmo, MIDI_MAPPER, NULL, 0, CALLBACK_NULL); midiOutShortMsg(hmo, MAKESMSG(PROGRAM_CHANGE, CH, ACOUSTIC_PIANO, 0)); for (LPCTSTR p = mml; *p; p++) { switch (*p) { case break; case . dot++; break; case 0 case 1 case 2 case 3 case 4 case 5 case 6 case 7 case 8 case 9 value = value * 10 + (*p - 0 ); break; case a case b case c case d case e case f case g Command( n ); note = (octave + 1) * 12 + noteList[*p - a ]; break; case l case o case r case t Command(*p); break; } } Command( ); midiOutReset(hmo); midiOutClose(hmo); return 0; } void Command(TCHAR newCmd) { DWORD wait = 240000 / (tempo * (value ? value len)); if (dot) wait += wait / 2; switch (cmd) { case l len = value; break; case n midiOutShortMsg(hmo, MAKESMSG(NOTE_ON, CH, note, velocity)); Sleep(wait); midiOutShortMsg(hmo, MAKESMSG(NOTE_OFF, CH, note, 0)); break; case o octave = value; break; case r Sleep(wait); break; case t tempo = value; break; } cmd = newCmd; value = 0; dot = 0; }